home *** CD-ROM | disk | FTP | other *** search
-
- My small contribution to DELPHI programmers:
- Here follows a small unit that helps you use any derivative of TCustomEdit for
- standard Pascal Input/Output. Hope you find it useful. It works the fine
- with the TP yacc and lex for parsing the contents of a TMemo. Could also
- replace the need for WinCRT.
-
- How to use it:
-
- Uses
- ...., EditText;
-
- Var
- F : Text;
- Memo1, Memo2: TMemo;
- S : String;
- i : Integer;
-
- Begin
-
- {Assumes the Memos have been created and exist on the form}
- AssignDevice(System.Input, Memo1);
- Reset(System.Input);
- AssignDevice(System.Output, Memo2);
- Rewrite(System.Output);
-
- {Now normal Reads and Writes work with Memo1 and Memo2. ie.}
- Writeln(S); Write(i:2);
-
-
- {Also}
- AssignDevice(F, Memo2);
- Rewrite(F);
- Writeln(F,S); Write(F,i:2);
-
- end;
-
-
- Source:
-
- unit EditText;
- {
-
- Written by Kiriakos Vlahos (kvlahos.@lbs.lon.ac.uk)
- Freeware - Please send comments of improvements.
-
- }
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- StdCtrls, Forms, Dialogs;
-
- procedure AssignDevice(var T: Text; NewEditComponent: TCustomEdit);
-
- implementation
-
- type
- EditData = record
- Edit: TCustomEdit;
- Filler: Array [1..12] of Char;
- end;
-
- function EditWrite(var F: TTextRec): Integer; far;
- begin
- with F do
- begin
- BufPtr^[BufPos] := #0;
- EditData(F.UserData).Edit.SetSelTextBuf(PChar(BufPtr));
- BufPos := 0;
- end;
- EditWrite := 0;
- end;
-
- function EditRead(var F: TTextRec): Integer; far;
- Var
- CurPos : Integer;
- begin
- with F do
- with EditData(UserData) do begin
- BufPos := 0;
- Edit.SelLength := BufSize;
- Edit.GetSelTextBuf(PChar(BufPtr), BufSize);
- BufEnd := StrLen(PChar(BufPtr));
- Edit.SelStart := Edit.SelStart + BufEnd;
- end;
- EditRead := 0;
- end;
-
- function EditFlush(var F: TTextRec): Integer; far;
- begin
- F.BufPos := 0;
- F.BufEnd := 0;
- EditFlush := 0;
- end;
-
- function EditOpen(var F: TTextRec): Integer; far;
- begin
- with F do
- begin
- if Mode = fmInput then
- begin
- InOutFunc := @EditRead;
- FlushFunc := nil;
- EditData(F.UserData).Edit.SelStart := 0;
- end
- else
- begin
- Mode := fmOutput;
- InOutFunc := @EditWrite;
- FlushFunc := @EditWrite;
- end;
- EditOpen := 0;
- end;
- end;
-
- function EditIgnore(var F: TTextRec): Integer; far;
- begin
- EditIgnore := 0;
- end;
-
- procedure AssignDevice(var T: Text; NewEditComponent: TCustomEdit);
- begin
- with TTextRec(T) do
- begin
- Handle := $FFFF;
- Mode := fmClosed;
- BufSize := SizeOf(Buffer)-1;
- BufPtr := @Buffer;
- OpenFunc := @EditOpen;
- CloseFunc := @EditIgnore;
- Name[0] := #0;
- EditData(UserData).Edit:= NewEditComponent;
- end;
- end;
-
- end.
-